Proceso de cálculo de víctimas imputadas

Reclutamiento de menores de edad desagregado por año del hecho: 1990-2017

library(verdata)

Introducción

Si es su primera vez trabajando con los datos, no está muy familiarizado con el paquete o simplemente quiere conocer más sobre el proyecto y el objetivo de estos ejemplos y el paquete verdata, consulte: https://github.com/HRDAG/CO-examples/blob/main/Introducción/output/Introducción.html antes de continuar.

En este ejemplo, se ilustrará el proceso para obtener los datos imputados de la presente violación. Específicamente, se replicará la figura (sup-der) de la página 12 del anexo metodológico del proyecto.

Autenticando e importando la base de datos (réplicas)

Se comienza autenticando e importando la base de datos, esto a través de dos funciones del paquete verdata: las funciones confirm_files y read_replicates. La autenticación de los datos es pertinente dado que estos fueron publicados con la licencia de atribución 4.0 internacional de Creative Commons (CC BY 4.0). Esta licencia permite la distribución y modificación de la información. Considerando que usted pudo haber llegado a estos datos por medio de diferentes fuentes, es importante que sepa si han sido modificados o no, para lo que puede hacer uso de estas dos funciones.

La función confirm_files autentica los archivos que han sido descargados. Considerando que cada violación tiene hasta 100 réplicas, esta función permite autenticar cada uno de estos archivos sin necesidad de leerlos a R. Esto, en caso de querer ahorrar recursos computacionales, o en caso de que no vaya a realizar su análisis con todas las réplicas. Esta función devolverá el mensaje “You have the right file!” si los archivos son iguales a los publicados, o el error “This file is not identical to the one published. This means the results of the analysis may potentially be inconsistent.” en caso contrario.

verdata::confirm_files(here::here("verdata-replicas/verdata-parquet"), 
                                  "reclutamiento", 1, 10)

Además, la función read_replicates permite 2 cosas: leer las réplicas a R en una sola tabla (ya sea a partir de un formato csv o parquet) y verificar que el contenido de las réplicas sea exactamente igual al publicado. Cuando el argumento crash tiene su valor por default (TRUE), la función retorna un objeto (data frame) si el contenido es igual, y el mensaje “The content of the files is not identical to the ones published. This means the results of the analysis may potentially be inconsistent.” si el contenido de la base fue previamente alterado/modificado, lo que quiere decir que los análisis que el usuario realice serán inconsistentes y llevarán a resultados erróneos. Este último error significa que nos datos no se han leído a R. Si por alguna razón, usted quiere leer los datos a pesar de saber que no son los mismos datos originalmente publicados, puede cambiar el argumento crash a FALSE, y, en ese caso, podrá ver dicha información junto con el mismo mensaje de advertencia.

replicas_datos <- verdata::read_replicates(here::here("verdata-parquet/reclutamiento"),
                                           "reclutamiento", 1, 10)

paged_table(replicas_datos, options = list(rows.print = 10, cols.print = 5))

Vemos que tenemos 192 260 registros, nuestras réplicas van desde la número 1 hasta la 10. Además, nuestros datos tienen información sobre la categoría de edad de la víctima, el presunto perpetrador, el sexo, el año del hecho, la pertenencia étnica, entre otros. Sin embargo, para centrarnos en un análisis más específico, tal como el realizado para el anexo metodológico, procederemos a crear, transformar y/o filtrar algunas variables.

Filtrando las réplicas acorde con el filtro del anexo metodológico

La función filter_standard_cev nos permite crear, transformar y/o filtrar nuestra información. Por ejemplo, aquellas víctimas que se documentaron como víctimas de la ex-guerrilla FARC-EP en años posteriores a 2016 pasaron a ser víctimas de otras guerrillas, ya que este primer grupo oficialmente dejó de existir después de dicho año (perp_change = TRUE).

replicas_filtradas <- verdata::filter_standard_cev(replicas_datos,
                                                   "reclutamiento", 
                                                   perp_change = TRUE)

paged_table(replicas_filtradas, options = list(rows.print = 10, cols.print = 5))

Víctimas documentadas

Después de aplicado el filtro, es momento de obtener una tabla con la información documentada, la misma que se obtuvo en el ejemplo sobre víctimas documentadas sobre el cálculo de víctimas documentadas para esta misma variable (con la función summary_observed). Esta información -previamente calculada- la importaremos desde la carpeta “output-documentados”.

tabla_documentada <-  arrow::read_parquet(here::here("Resultados-CEV/Documentados/output-documentados/reclutamiento-anio-documentado.parquet"))

paged_table(tabla_documentada, options = list(rows.print = 10, cols.print = 5))

Víctimas imputadas

Posterior a esto se aplica la función de combine_replicates que, como su nombre lo indica, permite combinar las réplicas para obtener lo que denominamos “la media de la estimación puntual” junto con el intervalo de confianza que permite dimensionar la incertidumbre de la imputación. Para esta función se siguieron las reglas de combinación de Rubin, que, si desea estudiar con más detalle de qué se trata, el libro Flexible Imputation of Missing Data de Stef van Buuren aborda paso a paso este proceso.

Ahora, esta función se compone de los siguientes argumentos: la violación a analizar; 2) tabla_documentada, es decir, el data frame derivado de la función summary_observed; 3) la base de datos filtrada replicas_filtradas; 4) strata_vars que será nuevamente la variable de año del hecho; 5) conflict_filter que filtra a aquellas personas que fueron víctimas dentro del marco del conflicto armado (variable is_conflict == TRUE) o no (variable is_conflict == FALSE).

Esta función también incluye un argumento denominado 5) forced_dis_filter que aplica únicamente a la violación de desaparición. Esta indica si la víctima fue desaparecida de forma “forzada” (forced_dis == TRUE) o no (forced_dis == FALSE). Para otras violaciones este argumento siempre será “FALSE”.

También contamos con otros argumentos: 6) edad_minors_filter que filtra por víctimas menores de edad (edad_minors_filter == TRUE) y 7) include_props que permite incluir el cálculo de las proporciones para nuestras variables de interés (include_props == TRUE). Cabe aclarar que el número de digitos por defecto es = 2.

tabla_combinada <- verdata::combine_replicates("reclutamiento",
                                                tabla_documentada,
                                                replicas_filtradas, 
                                                strata_vars = "yy_hecho",
                                                conflict_filter = TRUE,
                                                forced_dis_filter = TRUE,
                                                edad_minors_filter = FALSE,
                                                include_props = FALSE)

paged_table(tabla_combinada, options = list(rows.print = 10, cols.print = 5))
tabla_combinada <- tabla_combinada %>% 
     arrange(desc(imp_mean))

g <- tabla_combinada %>%
    mutate(yy_hecho = as.numeric(yy_hecho)) %>% 
    ggplot(aes(x = yy_hecho)) +
    geom_line(aes(y = observed, color = "Observado"),  size = 1) +
    geom_line(aes(y = imp_mean,  color = "Imputado"), size = 1) +
    theme_minimal() +
    theme(axis.text.x = element_text(size = 11, angle = 90),
        axis.title.y = element_text(size = 11),
        axis.ticks.x = element_line(size = 0.1)) +
    scale_x_continuous(breaks = seq(1980, 2016, 2)) +
    theme(legend.position = "bottom") +
    labs(x = "Año",
         y = "Número de víctimas",
         color = "") +
    scale_colour_manual(values = c("Imputado" = "#1F74B1", 
                               "Observado" = "#434343"))

g

Como se indicó, la línea de color negro muestra los datos documentados; esta documentación se refiere a víctimas sobre las cuales sabemos que efectivamente fueron víctimas menores de edad, pero, ¿qué pasa con las víctimas sin información acerca de esta característica? Pues bien, esta información (junto con la ya documentada) se encuentra en la línea azul, la cual muestra las víctimas después del proceso de imputación múltiple. Es decir, como se indicó anteriormente, esta línea incluye víctimas para las cuales no teníamos información inicialmente respecto a su edad, pero el proceso de imputación estimó que pertenecían a la categoría “MENOR”.

Así, después del proceso de imputación estadística y con un con un nivel de confianza del 95% se evidencia que hubo entre 1 293 a 1 347 víctimas en el 2 000 con un promedio de 1 320.

Es decir, esto implica que este promedio es la mejor estimación puntual respecto al número de víctimas de dicho año; no obstante, hay que tener en cuenta que siempre existe la incertidumbre de la imputación y que dicho fenómeno estará representado por el intervalo de confianza del 95%.

Por último, guardamos los resultados (en formato .parquet) en una carpeta denominada “output-imputados”, ya que esta tabla nos servirá como insumo para dimensionar (a nivel gráfico) los patrones de documentación de la violencia (como este y el anterior ejemplo) en contraste con los patrones de violencia a partir de la estimación y combinación.

arrow::write_parquet(tabla_combinada,
                     here::here("Resultados-CEV/Imputacion/output-imputados/reclutamiento-anio-imputados.parquet"))

Ejercicio

Acorde con la anterior interpretación, ¿cómo interpretaría los resultados para los demás años?